home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 30
/
Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso
/
Aminet
/
dev
/
amos
/
samplesm.lha
/
SamplesMaster.AMOS
/
SamplesMaster.amosSourceCode
Wrap
AMOS Source Code
|
1998-08-11
|
45KB
|
1,396 lines
'-> SamplesMaster by Stefano Regattin
'i> 7 luglio 1996
'm> 8,9,11,13,15,16,21,22,23,25,27,28,30 luglio 1996
'm> 1,2,4,7,8,10,12,13,14,16,17,20,21,28,29 agosto 1996
'm> 4,12,13,17 ottobre 1996
'm> 1,11,13,14 novembre 1996
'm> 20 febbraio 1997
'm> 8 marzo 1997
'm> 17 giugno 1997
'm> 10 novembre 1997
'm> 31 marzo 1998
'm> 3,4,5,8,9,11,20,25,26,27,29 aprile 1998
'm> 5,7,8,9,19,23 luglio 1998
'm> 11 agosto 1998
'------------------
Set Buffer 40
BANCO=65535
BANCODIIO=65534
BANCO3=65533
Global ANNOTAZIONI$,FILE$,NOMEFILE$,ZONAATTIVA$
Global ALTEZZA,ANOMALOIFF,BANCO,BANCODIIO,BANCO3,CICLO,FILTRO
Global FINECAMPIONE,FREQUENZA,GENERACAMPIONE,INIZIO,INIZIOCAMPIONE
Global LUNGHEZZACAMPIONE,NUOVAFINECAMPIONE,NUOVAFREQUENZA,NUOVOINIZIOCAMPIONE
Global PASSO,POSIZIONEINGRANDIMENTO,POSIZIONESLIDER,RIDUZIONE,SENZAMEMORIA
Global ULTIMALINEA,XLINEAFINECAMPIONE,XLINEAINIZIOCAMPIONE
Global YSLIDERINGRANDIMENTO,ZERO
Global DIVISIONESLIDERINGRANDIMENTO#
Dim F0RMADONDA(8191)
Global F0RMADONDA()
Proc SETTASCHERMO
Proc ARCOBALENO
Reserve As Chip Work BANCO,512
FILTRO=True
FREQUENZA=8363
Proc CONDIZIONEINIZIALE
Repeat
Repeat
TASTODELTOPOPREMUTO=Mouse Key
ZONATOPO=Mouse Zone
If TASTODELTOPOPREMUTO=1
If DENTROZONA=False
If ZONATOPO=1
Inverse On : Print At(0,ULTIMALINEA-3);"Suona"
Proc SUONA
End If
If ZONATOPO=2
Inverse On : Print At(0,ULTIMALINEA-2);"Ferma"
Sam Stop
End If
If ZONATOPO=3
CICLO= Not CICLO : Proc CICLO
End If
If ZONATOPO=4
FILTRO= Not FILTRO : Proc FILTRO
End If
If ZONATOPO=5
Inverse On : Print At(19,ULTIMALINEA-2);"Tutto"
NUOVOINIZIOCAMPIONE=Start(BANCO)
NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
Proc MOSTRACAMPIONE
INIZIO=True : Proc INIZIO
POSIZIONESLIDER=0
Proc SLIDERINGRANDIMENTO
POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
End If
If ZONATOPO=6
Inverse On : Print At(26,ULTIMALINEA-2);"Tra le linee"
Proc MOSTRACAMPIONE
INIZIO=True : Proc INIZIO
POSIZIONESLIDER=0
Proc SLIDERINGRANDIMENTO
POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
End If
If ZONATOPO=7
INIZIO=True : Proc INIZIO
POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
End If
If ZONATOPO=8
INIZIO=False : Proc INIZIO
POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
End If
If ZONATOPO=9
Inverse On : Print At(51,ULTIMALINEA-2);"<Indietro"
If INIZIO=True
Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,False] : NUOVOINIZIOCAMPIONE=Param
LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
Else
Proc CERCALOZERO[NUOVAFINECAMPIONE,False] : NUOVAFINECAMPIONE=Param
LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
End If
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO
Proc LINEE : Proc INGRANDISCI
End If
If ZONATOPO=10
Inverse On : Print At(61,ULTIMALINEA-2);"Avanti>"
If INIZIO=True
Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,True] : NUOVOINIZIOCAMPIONE=Param
LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
Else
Proc CERCALOZERO[NUOVAFINECAMPIONE,True] : NUOVAFINECAMPIONE=Param
LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
End If
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO
Proc LINEE : Proc INGRANDISCI
End If
If ZONATOPO=11
Inverse On : Print At(69,ULTIMALINEA-3);"Carica" : Inverse Off
Proc CARICAUNFILE
Exit If SENZAMEMORIA=True,2
If Exist(FILE$)
Proc CARICARAWOIFF
Proc CONDIZIONEINIZIALE
End If
End If
If ZONATOPO=12
If ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
Proc TIC[Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento di un Byte",ULTIMALINEA]
If INIZIO=True
NUOVOINIZIOCAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
Else
NUOVAFINECAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
End If
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO
Proc LINEE : Proc INGRANDISCI
Else
ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
Proc MOSTRALAZONAATTIVA
End If
NUOVOMESSAGGIO=True
End If
If ZONATOPO=13
If ZONAATTIVA$=" Campione"+Chr$(147)+Chr$(148)
If INIZIO=True
NUOVOINIZIOCAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
Else
NUOVAFINECAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-320
End If
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO
Proc LINEE : Proc INGRANDISCI
Else
ZONAATTIVA$=" Campione"+Chr$(147)+Chr$(148)
Proc MOSTRALAZONAATTIVA
End If
End If
If ZONATOPO=14
Inverse On : Print At(6,ULTIMALINEA-2);"Genera" : Inverse Off
Proc GENERACAMPIONE
GENERACAMPIONE=False
Proc CONDIZIONEINIZIALE
End If
If ZONATOPO=15
Inverse On : Print At(69,ULTIMALINEA-2);"Salva"
Proc SALVAUNFILE
Proc MESSAGGI
End If
If ZONATOPO=16
Exit 2
End If
If ZONATOPO=18
Inverse On
Print At(0,ULTIMALINEA-5);"Frequenza"
TIC["Ripristina la frequenza originaria",ULTIMALINEA]
NUOVAFREQUENZA=FREQUENZA
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
If ZONATOPO=19
Inverse On
Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
Inc NUOVAFREQUENZA
Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
If ZONATOPO=20
Inverse On
Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
Dec NUOVAFREQUENZA
Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
If ZONATOPO=21
Inverse On : Print At(26,ULTIMALINEA-5);"MixTimbri" : Inverse Off
Proc MISCELATIMBRI
GENERACAMPIONE=False
Proc CONDIZIONEINIZIALE
End If
DENTROZONA=True
End If
If ZONATOPO=17
POSIZIONESLIDER=X Screen(X Mouse)/DIVISIONESLIDERINGRANDIMENTO#
Proc SLIDERINGRANDIMENTO
POSIZIONEINGRANDIMENTO=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO-319
Proc INGRANDISCI
End If
Else If TASTODELTOPOPREMUTO=2
If ZONATOPO=19
Inverse On
Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
Proc TIC["Tasto destro del mouse>incremento veloce",ULTIMALINEA]
Inc NUOVAFREQUENZA
Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
If ZONATOPO=20
Inverse On
Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
Proc TIC["Tasto destro del mouse>decremento veloce",ULTIMALINEA]
Dec NUOVAFREQUENZA
Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
Else
Inverse Off
Print At(0,ULTIMALINEA-3);"Suona"
Print At(0,ULTIMALINEA-2);"Ferma"
Print At(19,ULTIMALINEA-2);"Tutto"
Print At(26,ULTIMALINEA-2);"Tra le linee"
Print At(51,ULTIMALINEA-2);"<Indietro"
Print At(61,ULTIMALINEA-2);"Avanti>"
Print At(69,ULTIMALINEA-3);"Carica"
Print At(69,ULTIMALINEA-2);"Salva"
Print At(0,ULTIMALINEA-5);"Frequenza";Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
Print At(26,ULTIMALINEA-5);"MixTimbri"
If NUOVOMESSAGGIO=True
Proc MESSAGGI
NUOVOMESSAGGIO=False
End If
DENTROZONA=False
End If
TASTOPREMUTO$=Inkey$
Until TASTOPREMUTO$<>""
If ZONAATTIVA$=" Campione"+Chr$(147)+Chr$(148)
If INIZIO=True
If TASTOPREMUTO$=Cright$
Add NUOVOINIZIOCAMPIONE,PASSO
LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
NUOVOINIZIOCAMPIONE=Param : Proc LINEE
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO
POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
End If
If TASTOPREMUTO$=Cleft$
Add NUOVOINIZIOCAMPIONE,-PASSO
LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
NUOVOINIZIOCAMPIONE=Param : Proc LINEE
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO
POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
End If
Else
If TASTOPREMUTO$=Cright$
Add NUOVAFINECAMPIONE,PASSO
LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
NUOVAFINECAMPIONE=Param : Proc LINEE
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO
POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
End If
If TASTOPREMUTO$=Cleft$
Add NUOVAFINECAMPIONE,-PASSO
LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
NUOVAFINECAMPIONE=Param : Proc LINEE
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO
POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
End If
End If
Else
If INIZIO=True
If TASTOPREMUTO$=Cright$
If TASTODELTOPOPREMUTO=0
Add NUOVOINIZIOCAMPIONE,320
Else
Inc NUOVOINIZIOCAMPIONE
End If
LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
NUOVOINIZIOCAMPIONE=Param : Proc LINEE
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO
POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
End If
If TASTOPREMUTO$=Cleft$
If TASTODELTOPOPREMUTO=0
Add NUOVOINIZIOCAMPIONE,-320
Else
Dec NUOVOINIZIOCAMPIONE
End If
LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
NUOVOINIZIOCAMPIONE=Param : Proc LINEE
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO
POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
End If
Else
If TASTOPREMUTO$=Cright$
If TASTODELTOPOPREMUTO=0
Add NUOVAFINECAMPIONE,320
Else
Inc NUOVAFINECAMPIONE
End If
LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
NUOVAFINECAMPIONE=Param : Proc LINEE
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO
POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
End If
If TASTOPREMUTO$=Cleft$
If TASTODELTOPOPREMUTO=0
Add NUOVAFINECAMPIONE,-320
Else
Dec NUOVAFINECAMPIONE
End If
LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
NUOVAFINECAMPIONE=Param : Proc LINEE
POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
Proc SLIDERINGRANDIMENTO
POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
End If
End If
End If
If TASTOPREMUTO$=Cup$
ZONAATTIVA$=" Campione"+Chr$(147)+Chr$(148)
Proc MOSTRALAZONAATTIVA
End If
If TASTOPREMUTO$=Cdown$
ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
Proc MOSTRALAZONAATTIVA
End If
Until TASTOPREMUTO$=Chr$(27)
Inverse On : Print At(76,ULTIMALINEA-2);"Esci" : Wait 50
Erase BANCO : Reserve Zone : Rainbow Del 0 : Screen Close 0 : End
Procedure ARCOBALENO
Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
Set Rainbow 0,1,16,"","",""
For LINEA=0 To 15 : Read DATO : Rain(0,LINEA)=DATO : Next LINEA
If Ntsc Then LUNGHEZZAARCOBALENO=223 Else LUNGHEZZAARCOBALENO=271
Rainbow 0,2,0,LUNGHEZZAARCOBALENO
End Proc
Procedure AZZERAFORMADONDA
Shared LUNGHEZZASINTETICO
For A=0 To LUNGHEZZASINTETICO-1
F0RMADONDA(A)=0
Next A
End Proc
Procedure CARICARAWOIFF
INDIRIZZO=Start(BANCODIIO)+8
If Peek$(INDIRIZZO,4)="8SVX"
Add INDIRIZZO,12
LUNGHEZZABANCO=Leek(INDIRIZZO)
If LUNGHEZZABANCO=0
Add INDIRIZZO,4
LUNGHEZZABANCO=Leek(INDIRIZZO)
Else
Add INDIRIZZO,4
End If
Add INDIRIZZO,8
FREQUENZA=Deek(INDIRIZZO)
Add INDIRIZZO,8
If Peek$(INDIRIZZO,4)="NAME"
Add INDIRIZZO,4
DATO=Leek(INDIRIZZO)
Add INDIRIZZO,4+DATO
End If
If Peek$(INDIRIZZO,4)="ANNO"
Add INDIRIZZO,4
DATO=Leek(INDIRIZZO)
Add INDIRIZZO,4
ANNOTAZIONI$=Peek$(INDIRIZZO,DATO)-Chr$(0)
Add INDIRIZZO,DATO
End If
If Peek$(INDIRIZZO,4)="BODY"
Add INDIRIZZO,4
LUNGHEZZADATI=Leek(INDIRIZZO)
Add INDIRIZZO,4
LUNGHEZZABANCO=Max(LUNGHEZZABANCO,LUNGHEZZADATI)
Reserve As Chip Work BANCO,LUNGHEZZABANCO
Copy INDIRIZZO,INDIRIZZO+LUNGHEZZABANCO-1 To Start(BANCO)
Else
Proc TIC[FILE$+Str$(Length(BANCODIIO))+" Byte",ULTIMALINEA-1]
Proc TIC["� un IFF anomalo, non posso caricarlo!",ULTIMALINEA]
Wait 200
NOMEFILE$=""
End If
Else
LUNGHEZZABANCO=Length(BANCODIIO)
Reserve As Chip Work BANCO,LUNGHEZZABANCO
Copy Start(BANCODIIO),Start(BANCODIIO)+LUNGHEZZABANCO-1 To Start(BANCO)
FREQUENZA=8363
ANNOTAZIONI$=""
End If
Erase BANCODIIO
End Proc
Procedure CARICAUNFILE
Sam Loop Off : Sam Stop : CICLO=False
FILE$=Fsel$("**","","Carica un campione audio","Premi Esc per uscire")
If Exist(FILE$)
Open In 1,FILE$
LUNGHEZZABANCO=Max(Lof(1),512)
Close 1
MEMORIA=Chip Free+Fast Free
If LUNGHEZZABANCO>MEMORIA
Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
Proc TIC[FILE$,ULTIMALINEA] : Wait 200
SENZAMEMORIA=True
Else
Reserve As Work BANCODIIO,LUNGHEZZABANCO
Bload FILE$,Start(BANCODIIO)
SEPARATORE=Instr(FILE$,":") : POSIZIONE=1
For A=1 To Len(FILE$)
If Instr(FILE$,"/",POSIZIONE)>0
SEPARATORECASSETTO=Instr(FILE$,"/",POSIZIONE)
POSIZIONE=SEPARATORECASSETTO+1
End If
Next A
SEPARATORE=Max(SEPARATORE,SEPARATORECASSETTO)
PERCORSO$=Left$(FILE$,SEPARATORE)
If Right$(PERCORSO$,1)="/"
PERCORSO$=Left$(PERCORSO$,Len(PERCORSO$)-1)
End If
NOMEFILE$=Right$(FILE$,Len(FILE$)-SEPARATORE)
SENZAMEMORIA=False
End If
End If
End Proc
Procedure CERCALOZERO[POSIZIONE,AVANTI]
If AVANTI=True
Repeat
Inc POSIZIONE
DATO=Peek(POSIZIONE)
Until DATO=0
Else
Repeat
Dec POSIZIONE
DATO=Peek(POSIZIONE)
Until DATO=0
End If
End Proc[POSIZIONE]
Procedure CICLO
If CICLO=True
Sam Loop On
If GENERACAMPIONE=True
Inverse On : Print At(12,8);"Ciclo" : Inverse Off
Else
Inverse On : Print At(6,ULTIMALINEA-3);"Ciclo" : Inverse Off
End If
Else
Sam Loop Off
If GENERACAMPIONE=True
Print At(12,8);"Ciclo"
Else
Print At(6,ULTIMALINEA-3);"Ciclo"
End If
End If
End Proc
Procedure CONDIZIONEINIZIALE
INIZIO=True
NUOVOINIZIOCAMPIONE=Start(BANCO)
NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
NUOVAFREQUENZA=FREQUENZA
Cls
Proc MOSTRACAMPIONE
POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
Proc INGRANDISCI
Proc SETTALEZONE
Proc MESSAGGI
Proc CICLO
Proc FILTRO
Proc FREQUENZA
ZONAATTIVA$=" Campione"+Chr$(147)+Chr$(148)
Proc MOSTRALAZONAATTIVA
Print At(0,ULTIMALINEA-4);"Sorgente>";ANNOTAZIONI$
End Proc
Procedure FILTRO
If FILTRO=True
Led On
If GENERACAMPIONE=True
Inverse On : Print At(18,8);"Filtro" : Inverse Off
Else
Inverse On : Print At(12,ULTIMALINEA-3);"Filtro" : Inverse Off
End If
Else
Led Off
If GENERACAMPIONE=True
Print At(18,8);"Filtro"
Else
Print At(12,ULTIMALINEA-3);"Filtro"
End If
End If
End Proc
Procedure FREQUENZA
If GENERACAMPIONE=True
Print At(39,8);Str$(NUOVAFREQUENZA)-" ";
Else
Print At(14,ULTIMALINEA-5);Str$(NUOVAFREQUENZA)-" ";
End If
Print " Hertz "
End Proc
Procedure GENERACAMPIONE
Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
NOMEFILE$="Sintetico"
GENERACAMPIONE=True
Cls
Proc TIC["Indica la lunghezza in multipli di 512 Byte (01-16)",ULTIMALINEA]
RISPOSTA$=Input$(2) : RISPOSTA=Val(RISPOSTA$)
Proc LIMITI[RISPOSTA,1,16] : RISPOSTA=Param
LUNGHEZZASINTETICO=512*RISPOSTA
Reserve Zone 21
Ink 2 : Draw 0,31 To 511,31 : Draw 0,103 To 511,103 : Ink 1
Set Zone 1,0,0 To 511,63
Print At(0,8);Zone$("Suona",2)
Print At(6,8);Zone$("Ferma",3)
Print At(12,8);Zone$("Ciclo",4)
Print At(18,8);Zone$("Filtro",5)
Set Zone 6,0,72 To 511,135
Print At(0,18);Zone$("Suona",7)
Print At(6,18);"Forme d'onda:"
Print At(6,19);Zone$("Sinusoidale",8)
Print At(6,20);Zone$("Triangolare",9)
Print At(6,21);Zone$("Dente di sega",10)
Print At(6,22);Zone$("Quadra",11)
Print At(6,23);Zone$("Disegno",12)
Print At(20,18);"Operazioni:"
Print At(20,19);Zone$("Somma",13)
Print At(20,20);Zone$("Sottrai",14)
Print At(20,21);Zone$("Inverti",15)
Print At(20,22);Zone$("Rovescia",16)
Print At(76,17); Using "####";1
Hslider 0,136 To 607,143,128,0,1
Set Zone 17,0,136 To 607,143
Print At(25,8);Zone$("Frequenza",18);
Print Zone$(Chr$(147)+Chr$(148),19);
Print Zone$(Chr$(149)+Chr$(150),20);
Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
Print At(20,23);Zone$("Progressione",21)
Proc CICLO
Proc FILTRO
Reserve As Chip Work BANCO,LUNGHEZZASINTETICO
Reserve As Chip Work BANCODIIO,LUNGHEZZASINTETICO
FREQUENZAMASSIMA=LUNGHEZZASINTETICO/4
LUNGHEZZA$=Str$(LUNGHEZZASINTETICO)+" Byte"
Print At(80-Len(LUNGHEZZA$),8);LUNGHEZZA$
Proc TIC["Premi Esc per uscire",ULTIMALINEA]
Repeat
Repeat
TASTOPREMUTO$=Inkey$
TASTODELTOPOPREMUTO=Mouse Key
ZONATOPO=Mouse Zone
If TASTODELTOPOPREMUTO=1
If DENTROZONA=False
If ZONATOPO=2
Inverse On : Print At(0,8);"Suona"
Sam Raw 1,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
Sam Raw 2,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
End If
If ZONATOPO=3
Inverse On : Print At(6,8);"Ferma"
Sam Stop
End If
If ZONATOPO=4
CICLO= Not CICLO : Proc CICLO
End If
If ZONATOPO=5
FILTRO= Not FILTRO : Proc FILTRO
End If
If ZONATOPO=7
Inverse On : Print At(0,18);"Suona"
Sam Raw 4,Start(BANCODIIO),Length(BANCODIIO),NUOVAFREQUENZA
Sam Raw 8,Start(BANCODIIO),Length(BANCODIIO),NUOVAFREQUENZA
End If
If ZONATOPO=8
Inverse On : Print At(6,19);"Sinusoidale"
Cls 0,0,72 To 639+1,135+1
Ink 2 : Draw 0,103 To 511,103 : Ink 1
UNITA#=2*Pi#/LUNGHEZZASINTETICO
For X=0 To LUNGHEZZASINTETICO-1
DATO=Sin(UNITA#*X)*127
Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
If DATO<0
Add DATO,256
End If
INDIRIZZO=Start(BANCODIIO)+X
Poke INDIRIZZO,DATO
Next X
Proc MULTIPLO
End If
If ZONATOPO=9
Inverse On : Print At(6,20);"Triangolare"
Cls 0,0,72 To 639+1,135+1
Ink 2 : Draw 0,103 To 511,103 : Ink 1
For X=0 To LUNGHEZZASINTETICO-1
If X<LUNGHEZZASINTETICO/4
DATO=(X*512)/LUNGHEZZASINTETICO
End If
If X>LUNGHEZZASINTETICO/4-1 and X<LUNGHEZZASINTETICO/4*3
DATO=((LUNGHEZZASINTETICO/2-X)*512)/LUNGHEZZASINTETICO-1
End If
If X>LUNGHEZZASINTETICO/4*3-1
DATO=((X-LUNGHEZZASINTETICO)*512)/LUNGHEZZASINTETICO
End If
Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
If DATO<0
Add DATO,256
End If
INDIRIZZO=Start(BANCODIIO)+X
Poke INDIRIZZO,DATO
Next X
Proc MULTIPLO
End If
If ZONATOPO=10
Inverse On : Print At(6,21);"Dente di sega"
Cls 0,0,72 To 639+1,135+1
Ink 2 : Draw 0,103 To 511,103 : Ink 1
For X=0 To LUNGHEZZASINTETICO-1
DATO=((X/2-LUNGHEZZASINTETICO/4)*512)/LUNGHEZZASINTETICO
Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
If DATO<0
Add DATO,256
End If
INDIRIZZO=Start(BANCODIIO)+X
Poke INDIRIZZO,DATO
Next X
Proc MULTIPLO
End If
If ZONATOPO=11
Inverse On : Print At(6,22);"Quadra"
Cls 0,0,72 To 639+1,135+1
Ink 2 : Draw 0,103 To 511,103 : Ink 1 : Gr Locate 0,103
For X=0 To LUNGHEZZASINTETICO-1
If X<LUNGHEZZASINTETICO/2
DATO=127
Else
DATO=-128
End If
Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
If DATO<0
Add DATO,256
End If
INDIRIZZO=Start(BANCODIIO)+X
Poke INDIRIZZO,DATO
Next X
Proc MULTIPLO
End If
If ZONATOPO=12
Inverse On : Print At(6,23);"Disegno"
Proc TIC["Premi il tasto destro del mouse per finire",ULTIMALINEA]
Repeat
TASTODELTOPOPREMUTO=Mouse Key
ZONATOPO=Mouse Zone
If TASTODELTOPOPREMUTO=1 and ZONATOPO=6
XTOPO=X Screen(X Mouse) : YTOPO=Y Screen(Y Mouse)
Ink 0 : Box XTOPO,72 To XTOPO+1,135
Ink 2 : Draw XTOPO,103 To XTOPO+1,103
Ink 1 : Draw XTOPO,YTOPO To XTOPO+1,YTOPO
DATO=(103-YTOPO)*4
If DATO<0
Add DATO,256
End If
INDIRIZZO=Start(BANCODIIO)+XTOPO*LUNGHEZZASINTETICO/512
For A=0 To LUNGHEZZASINTETICO/512
Poke INDIRIZZO+A,DATO
Next A
End If
Until TASTODELTOPOPREMUTO=2
Cls 0,0,72 To 639+1,135+1
Ink 2 : Draw 0,103 To 511,103 : Ink 1
Gr Locate 0,103
For X=0 To LUNGHEZZASINTETICO-1 Step LUNGHEZZASINTETICO/512
DATO=Peek(Start(BANCODIIO)+X)
If DATO>127
Add DATO,-256
End If
Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
Next X
NUOVOMESSAGGIO=True
End If
If ZONATOPO=13
Inverse On : Print At(20,19);"Somma"
Proc SOMMA
Proc MOSTRASINTETICO
End If
If ZONATOPO=14
Inverse On : Print At(20,20);"Sottrai"
For X=0 To LUNGHEZZASINTETICO-1
DATO=Peek(Start(BANCODIIO)+X)
If DATO>127
Add DATO,-256
End If
Add F0RMADONDA(X),-DATO
Next X
Proc MOSTRASINTETICO
End If
If ZONATOPO=15
Inverse On : Print At(20,21);"Inverti"
Cls 0,0,72 To 639+1,135+1
Ink 2 : Draw 0,103 To 511,103 : Ink 1
Gr Locate 0,103
For X=0 To LUNGHEZZASINTETICO-1
DATO=Peek(Start(BANCODIIO)+X)
If DATO>127
Add DATO,-256
End If
DATO= Not DATO
Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
If DATO<0
Add DATO,256
End If
INDIRIZZO=Start(BANCODIIO)+X
Poke INDIRIZZO,DATO
Next X
End If
If ZONATOPO=16
Inverse On : Print At(20,22);"Rovescia"
Cls 0,0,72 To 639+1,135+1
Ink 2 : Draw 0,103 To 511,103 : Ink 1
Reserve As Work BANCO3,LUNGHEZZASINTETICO
For X=0 To LUNGHEZZASINTETICO-1
DATO=Peek(Start(BANCODIIO)+X)
INDIRIZZO=Start(BANCO3)+LUNGHEZZASINTETICO-1-X
Poke INDIRIZZO,DATO
If DATO>127
Add DATO,-256
End If
Polyline To((LUNGHEZZASINTETICO-1-X)*512)/LUNGHEZZASINTETICO,103-DATO/4
Next X
Copy Start(BANCO3),Start(BANCO3)+Length(BANCO3)-1 To Start(BANCODIIO)
Erase BANCO3
End If
If ZONATOPO=18
Inverse On : Print At(25,8);"Frequenza"
Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
NUOVAFREQUENZA=FREQUENZA
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
If ZONATOPO=19
Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
Inc NUOVAFREQUENZA
Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
If ZONATOPO=20
Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
Dec NUOVAFREQUENZA
Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
If ZONATOPO=21
Inverse On : Print At(20,23);"Progressione"
Proc TIC["Progressione aritmetica o geometrica (a/g) ?",ULTIMALINEA]
RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
If RISPOSTA$="a"
PROGRESSIONE$="Aritmetica"
End If
If RISPOSTA$="g"
PROGRESSIONE$="Geometrica"
End If
If PROGRESSIONE$<>""
Proc TIC["Inizio della progressione (0001-"+Str$(FREQUENZAMASSIMA)-" "+") ?",ULTIMALINEA]
PRIMOTERMINE$=Input$(4) : PRIMOTERMINE=Val(PRIMOTERMINE$)
Proc LIMITI[PRIMOTERMINE,1,FREQUENZAMASSIMA] : PRIMOTERMINE=Param
Proc TIC["Fine della progressione (0001-"+Str$(FREQUENZAMASSIMA)-" "+") ?",ULTIMALINEA]
ULTIMOTERMINE$=Input$(4) : ULTIMOTERMINE=Val(ULTIMOTERMINE$)
Proc LIMITI[ULTIMOTERMINE,1,FREQUENZAMASSIMA] : ULTIMOTERMINE=Param
Proc TIC["Numero di valori intermedi (001-126) ?",ULTIMALINEA]
VLORIINTERMEDI$=Input$(3) : VLORITOTALI=Val(VLORIINTERMEDI$)+2
Proc LIMITI[VLORITOTALI,3,128] : VLORITOTALI=Param
End If
If PROGRESSIONE$="Aritmetica"
RAGIONE#=(ULTIMOTERMINE-PRIMOTERMINE)/(VLORITOTALI-1*1.0)
For A=1 To VLORITOTALI
If A=VLORITOTALI
MULTIPLO#=ULTIMOTERMINE
Else
MULTIPLO#=RAGIONE#*(A-1)+PRIMOTERMINE
End If
Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
Proc MULTIPLO
Cls 0,0,72 To 639+1,135+1
Ink 2 : Draw 0,103 To 511,103 : Ink 1
Proc SOMMA
Next A
For A=0 To LUNGHEZZASINTETICO Step 4
Loke Start(BANCODIIO)+A,0
Next A
Proc MOSTRASINTETICO
End If
If PROGRESSIONE$="Geometrica"
RAGIONE#=(ULTIMOTERMINE/PRIMOTERMINE)^(1.0/(VLORITOTALI-1))
For A=1 To VLORITOTALI
If A=VLORITOTALI
MULTIPLO#=ULTIMOTERMINE
Else
MULTIPLO#=RAGIONE#^(A-1)*PRIMOTERMINE
End If
Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
Proc MULTIPLO
Cls 0,0,72 To 639+1,135+1
Ink 2 : Draw 0,103 To 511,103 : Ink 1
Proc SOMMA
Next A
Proc MOSTRASINTETICO
End If
PROGRESSIONE$=""
NUOVOMESSAGGIO=True
End If
DENTROZONA=True
End If
If ZONATOPO=17
MULTIPLO#=X Screen(X Mouse)/(607.0/FREQUENZAMASSIMA)
Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#,1 : Wait Vbl
MULTIPLO#=MULTIPLO#+1 : Print At(76,17); Using "####";MULTIPLO#
End If
Else If TASTODELTOPOPREMUTO=2
If ZONATOPO=19
Inverse On
Print At(34,8);Chr$(147)+Chr$(148)
Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
Inc NUOVAFREQUENZA
Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
If ZONATOPO=20
Inverse On
Print At(36,8);Chr$(149)+Chr$(150)
Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
Dec NUOVAFREQUENZA
Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
Else
Inverse Off
Print At(0,8);"Suona"
Print At(6,8);"Ferma"
Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
Print At(0,18);"Suona"
Print At(6,19);"Sinusoidale"
Print At(6,20);"Triangolare"
Print At(6,21);"Dente di sega"
Print At(6,22);"Quadra"
Print At(6,23);"Disegno"
Print At(20,19);"Somma"
Print At(20,20);"Sottrai"
Print At(20,21);"Inverti"
Print At(20,22);"Rovescia"
Print At(20,23);"Progressione"
If NUOVOMESSAGGIO=True
Proc TIC["Premi Esc per uscire",ULTIMALINEA]
NUOVOMESSAGGIO=False
End If
DENTROZONA=False
End If
Until TASTOPREMUTO$<>""
Until TASTOPREMUTO$=Chr$(27)
Erase BANCODIIO
Proc AZZERAFORMADONDA
End Proc
Procedure INGRANDISCI
Cls 0,0,72 To 639+1,72+ALTEZZA+1
Ink 2 : Draw 0,72+ZERO To 639,72+ZERO : Ink 1
Clip 0,72 To 639,72+ALTEZZA
Gr Locate 0,72+ZERO
For X=0 To 639
POSIZIONE=POSIZIONEINGRANDIMENTO+X
DATO=Peek(POSIZIONE)
If DATO>127
Add DATO,-256
End If
If POSIZIONE>=Start(BANCO) and POSIZIONE<=Start(BANCO)+Length(BANCO)-1
If POSIZIONE=Start(BANCO)+Length(BANCO)-1
Polyline X,72+ZERO-DATO To X,72+ZERO
Else
Polyline To X,72+ZERO-DATO : Y=Ygr
End If
Else
Gr Locate X+1,72+ZERO
End If
If POSIZIONE=NUOVOINIZIOCAMPIONE
Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
Gr Writing 1 : Gr Locate X,Y
End If
If POSIZIONE=NUOVAFINECAMPIONE
Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
Draw X+3,72 To X+7,72
Draw X+3,74 To X+7,74
Draw X+3,72 To X+3,76
Gr Writing 1 : Gr Locate X,Y
End If
Next X
Clip
End Proc
Procedure INIZIO
If INIZIO=True
Inverse On : Print At(39,ULTIMALINEA-2);"Inizio" : Inverse Off
Print At(46,ULTIMALINEA-2);"Fine"
Else
Print At(39,ULTIMALINEA-2);"Inizio"
Inverse On : Print At(46,ULTIMALINEA-2);"Fine" : Inverse Off
End If
End Proc
Procedure LIMITI[NUMERO,LIMITEMINIMO,LIMITEMASSIMO]
'-> Limiti by Stefano Regattin
'i> 19 maggio 1996
'm> 12 giugno 1996
'--------------------------------------------------------
'La procedura equivale alle seguenti linee di programma:
' If NUMERO<LIMITEMINIMO Then NUMERO=LIMITEMINIMO
' If NUMERO>LIMITEMASSIMO Then NUMERO=LIMITEMASSIMO
'Se LIMITEMINIMO � maggiore di LIMITEMASSIMO ne scambia i valori
'----------------------------------------------------------------
If LIMITEMINIMO>LIMITEMASSIMO Then Swap LIMITEMINIMO,LIMITEMASSIMO
NUMERO=Max(Min(NUMERO,LIMITEMASSIMO),LIMITEMINIMO)
End Proc[NUMERO]
Procedure LINEE
NUOVOINIZIOCAMPIONE=Min(NUOVOINIZIOCAMPIONE,NUOVAFINECAMPIONE-511)
If NUOVOINIZIOCAMPIONE<INIZIOCAMPIONE
NUOVOINIZIOCAMPIONE=INIZIOCAMPIONE
NUOVAFINECAMPIONE=NUOVOINIZIOCAMPIONE+511
End If
NUOVAFINECAMPIONE=Max(NUOVAFINECAMPIONE,NUOVOINIZIOCAMPIONE+511)
Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
XLINEAINIZIOCAMPIONE=(NUOVOINIZIOCAMPIONE-INIZIOCAMPIONE)/PASSO
Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
XLINEAFINECAMPIONE=(NUOVAFINECAMPIONE-INIZIOCAMPIONE)/PASSO
Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
Inverse Off : Print At(0,8);"Inizio>Byte";NUOVOINIZIOCAMPIONE-Start(BANCO);
Print " Fine>Byte";NUOVAFINECAMPIONE-Start(BANCO);
LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte "
End Proc
Procedure MESSAGGI
Proc TIC[NOMEFILE$+Str$(Length(BANCO))+" Byte",ULTIMALINEA-1]
Proc TIC[Chr$(147)+Chr$(148)+" "+Chr$(149)+Chr$(150)+" zona attiva "+Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento Esc Esci",ULTIMALINEA]
End Proc
Procedure MISCELATIMBRI
Sam Loop Off : Sam Stop : CICLO=False
Cls
FILE$=Fsel$("**","","Carica il primo campione audio","Premi Esc per uscire")
If Exist(FILE$)
Open In 1,FILE$
LUNGHEZZABANCO=Max(Lof(1),512)
Close 1
MEMORIA=Chip Free+Fast Free
If LUNGHEZZABANCO>MEMORIA
Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
Proc TIC[FILE$,ULTIMALINEA] : Wait 200
SENZAMEMORIA=True
Else
Reserve As Work BANCODIIO,LUNGHEZZABANCO
Bload FILE$,Start(BANCODIIO)
SENZAMEMORIA=False
Proc CARICARAWOIFF
LUNGHEZZABANCO1=LUNGHEZZABANCO
Reserve As Chip Work BANCO3,LUNGHEZZABANCO1
Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCO3)
End If
End If
FILE$=Fsel$("**","","Carica il secondo campione audio","Premi Esc per uscire")
If Exist(FILE$)
Open In 1,FILE$
LUNGHEZZABANCO=Max(Lof(1),512)
Close 1
MEMORIA=Chip Free+Fast Free
If LUNGHEZZABANCO>MEMORIA
Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
Proc TIC[FILE$,ULTIMALINEA] : Wait 200
SENZAMEMORIA=True
Else
Reserve As Work BANCODIIO,LUNGHEZZABANCO
Bload FILE$,Start(BANCODIIO)
SENZAMEMORIA=False
Proc CARICARAWOIFF
LUNGHEZZABANCO2=LUNGHEZZABANCO
Reserve As Chip Work BANCODIIO,LUNGHEZZABANCO2
Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCODIIO)
End If
End If
LUNGHEZZABANCO=Max(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
If LUNGHEZZABANCO1=0 or LUNGHEZZABANCO2=0
Proc TIC["Devi scegliere due campioni audio!",ULTIMALINEA]
Wait 200 : Pop Proc
End If
If SENZAMEMORIA=True Then Pop Proc
Reserve As Chip Work BANCO,LUNGHEZZABANCO
GENERACAMPIONE=True
Reserve Zone 8
MOSTRACAMPIONEPERMISCELAZIONE[BANCO3,0]
MOSTRACAMPIONEPERMISCELAZIONE[BANCODIIO,72]
Print At(0,8);Zone$("Suona",1)
Print At(6,8);Zone$("Ferma",2)
Print At(12,8);Zone$("Ciclo",3)
Print At(51,8);"Lunghezza>";Str$(Length(BANCO3))-" ";" Byte"
Print At(18,8);Zone$("Filtro",4)
Print At(0,17);Zone$("Suona",5)
Print At(6,17);"Lunghezza>";Str$(Length(BANCODIIO))-" ";" Byte"
Print At(25,8);Zone$("Frequenza",6);
Print Zone$(Chr$(147)+Chr$(148),7);
Print Zone$(Chr$(149)+Chr$(150),8);
Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
Proc CICLO
Proc FILTRO
Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
Repeat
Repeat
TASTOPREMUTO$=Inkey$
TASTODELTOPOPREMUTO=Mouse Key
ZONATOPO=Mouse Zone
If TASTODELTOPOPREMUTO=1
If DENTROZONA=False
If ZONATOPO=1
Inverse On : Print At(0,8);"Suona"
Sam Raw 1,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
Sam Raw 2,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
End If
If ZONATOPO=2
Inverse On : Print At(6,8);"Ferma"
Sam Stop
End If
If ZONATOPO=3
CICLO= Not CICLO : Proc CICLO
End If
If ZONATOPO=4
FILTRO= Not FILTRO : Proc FILTRO
End If
If ZONATOPO=5
Inverse On : Print At(0,17);"Suona"
Sam Raw 4,Start(BANCODIIO),Length(BANCODIIO),NUOVAFREQUENZA
Sam Raw 8,Start(BANCODIIO),Length(BANCODIIO),NUOVAFREQUENZA
End If
If ZONATOPO=6
Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
NUOVAFREQUENZA=FREQUENZA
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
If ZONATOPO=7
Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
Inc NUOVAFREQUENZA
Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
If ZONATOPO=8
Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
Dec NUOVAFREQUENZA
Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
DENTROZONA=True
End If
Else If TASTODELTOPOPREMUTO=2
If ZONATOPO=7
Inverse On
Print At(34,8);Chr$(147)+Chr$(148)
Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
Inc NUOVAFREQUENZA
Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
If ZONATOPO=8
Inverse On
Print At(36,8);Chr$(149)+Chr$(150)
Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
Dec NUOVAFREQUENZA
Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
Proc FREQUENZA
NUOVOMESSAGGIO=True
End If
Else
Inverse Off
Print At(0,8);"Suona"
Print At(6,8);"Ferma"
Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
Print At(0,17);"Suona"
If NUOVOMESSAGGIO=True
Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
NUOVOMESSAGGIO=False
End If
DENTROZONA=False
End If
Until TASTOPREMUTO$<>""
If TASTOPREMUTO$=Chr$(27) Then Pop Proc
Until TASTOPREMUTO$=" "
If LUNGHEZZABANCO1>LUNGHEZZABANCO2
SCELTA=1
Else If LUNGHEZZABANCO1=LUNGHEZZABANCO2
Repeat
Proc TIC["I 2 campioni sono lunghi uguale; quale scegli come campione di partenza (1/2) ?",ULTIMALINEA]
SCELTA$=Input$(1) : SCELTA=Val(SCELTA$)
Until SCELTA=1 or SCELTA=2
Else
SCELTA=2
End If
Proc TIC["Sto miscelando i due campioni...",ULTIMALINEA]
If SCELTA=1
Copy Start(BANCO3),Start(BANCO3)+LUNGHEZZABANCO1-1 To Start(BANCO)
Else
Copy Start(BANCODIIO),Start(BANCODIIO)+LUNGHEZZABANCO2-1 To Start(BANCO)
End If
LUNGHEZZAMISCELAZIONE=Min(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
For INDIRIZZO=0 To LUNGHEZZAMISCELAZIONE-1
VLOREPERCENTUALE=(INDIRIZZO*100)/LUNGHEZZAMISCELAZIONE
If SCELTA=1
DATO1=(Peek(Start(BANCO3)+INDIRIZZO)*VLOREPERCENTUALE)/100
DATO2=(Peek(Start(BANCODIIO)+INDIRIZZO)*(100-VLOREPERCENTUALE))/100
Else
DATO1=(Peek(Start(BANCO3)+INDIRIZZO)*(100-VLOREPERCENTUALE))/100
DATO2=(Peek(Start(BANCODIIO)+INDIRIZZO)*VLOREPERCENTUALE)/100
End If
If DATO1>127
Add DATO1,-256
End If
If DATO2>127
Add DATO2,-256
End If
DATOMISCELAZIONE=(DATO1+DATO2)/2
If DATOMISCELAZIONE<0
Add DATOMISCELAZIONE,256
End If
Poke Start(BANCO)+INDIRIZZO,DATOMISCELAZIONE
Next INDIRIZZO
ANNOTAZIONI$="SamplesMaster by Stefano Regattin"
End Proc
Procedure MOSTRACAMPIONE
INIZIOCAMPIONE=NUOVOINIZIOCAMPIONE : FINECAMPIONE=NUOVAFINECAMPIONE
PASSO=(FINECAMPIONE-INIZIOCAMPIONE+1)/640+1 : PASSO=Max(PASSO,1)
Cls 0,0,0 To 639+1,63+1 : Ink 2 : Draw 0,31 To 639,31 : Gr Locate 0,31 : Ink 1
For INDIRIZZO=INIZIOCAMPIONE To FINECAMPIONE Step PASSO
DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
Polyline To X,31-DATO/4 : Inc X
Next INDIRIZZO
XLINEAINIZIOCAMPIONE=0 : XLINEAFINECAMPIONE=X-1
Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
Inverse Off : Print At(0,8);"Inizio>Byte";INIZIOCAMPIONE-Start(BANCO);
Print " Fine>Byte";FINECAMPIONE-Start(BANCO);
Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte "
DIVISIONESLIDERINGRANDIMENTO#=640.0/PASSO
End Proc
Procedure MOSTRACAMPIONEPERMISCELAZIONE[B,P]
IC=Start(B) : FC=Start(B)+Length(B)-1
PASSO=(FC-IC+1)/640+1 : PASSO=Max(PASSO,1)
Ink 2 : Draw 0,P+31 To 639,P+31 : Gr Locate 0,P+31 : Ink 1
For INDIRIZZO=IC To FC Step PASSO
DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
Polyline To X,P+31-DATO/4 : Inc X
Next INDIRIZZO
End Proc
Procedure MOSTRASINTETICO
Shared LUNGHEZZASINTETICO
Cls 0,0,0 To 511+1,63+1
Ink 2 : Draw 0,31 To 511,31 : Ink 1
Gr Locate 0,31 : DIVISORE=1
For X=0 To LUNGHEZZASINTETICO-1
DATO=F0RMADONDA(X)/DIVISORE
If DATO>127 or DATO<-128
Cls 0,0,0 To 511+1,63+1
Ink 2 : Draw 0,31 To 511,31 : Ink 1
Gr Locate 0,31 : Inc DIVISORE : X=-1
End If
If X>-1
Polyline To(X*512)/LUNGHEZZASINTETICO,31-DATO/4
If DATO<0
Add DATO,256
End If
Poke Start(BANCO)+X,DATO
End If
Next X
End Proc
Procedure MOSTRALAZONAATTIVA
Print At(65,8);ZONAATTIVA$
End Proc
Procedure MULTIPLO
Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
If MULTIPLO#>1
Reserve As Work BANCO3,LUNGHEZZASINTETICO
Repeat
For X=0 To LUNGHEZZASINTETICO-1 Step MULTIPLO#
DATO=Peek(Start(BANCODIIO)+X)
INDIRIZZO=Start(BANCO3)+M
Poke INDIRIZZO,DATO : Inc M : Exit If M=LUNGHEZZASINTETICO
Next X
Until M=LUNGHEZZASINTETICO
Gr Locate 0,103
For X=0 To LUNGHEZZASINTETICO-1
DATO=Peek(Start(BANCO3)+X)
INDIRIZZO=Start(BANCODIIO)+X
Poke INDIRIZZO,DATO
If DATO>127
Add DATO,-256
End If
Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
Next X
Erase BANCO3
Inverse Off
Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#-1,1
Print At(76,17); Using "####";MULTIPLO#
End If
End Proc
Procedure SALVAUNFILE
Sam Loop Off : Sam Stop : CICLO=False
FILE$=Fsel$("**",NOMEFILE$,"Salva un campione audio","Premi Esc per uscire")
If FILE$<>""
TIC["Vuoi salvarlo come file IFF (s/n) ?",ULTIMALINEA]
RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
If RISPOSTA$="s"
Proc TIC["Sto salvando il campione audio IFF",ULTIMALINEA-1]
Proc TIC[FILE$,ULTIMALINEA]
LUNGHEZZANOME=Len(NOMEFILE$)/4*4
RESTONOME=Len(NOMEFILE$) mod 4
If RESTONOME>0
Add LUNGHEZZANOME,4
End If
LUNGHEZZAANNO=36
LUNGHEZZABANCO=40+8+LUNGHEZZAANNO+8+LUNGHEZZACAMPIONE
If NOMEFILE$<>""
Add LUNGHEZZABANCO,8+LUNGHEZZANOME
End If
Reserve As Work BANCODIIO,LUNGHEZZABANCO
INDIRIZZO=Start(BANCODIIO)
Poke$ INDIRIZZO,"FORM"
Add INDIRIZZO,4
Loke INDIRIZZO,LUNGHEZZABANCO-8
Add INDIRIZZO,4
Poke$ INDIRIZZO,"8SVXVHDR"
Add INDIRIZZO,8
Loke INDIRIZZO,20
Add INDIRIZZO,4
Loke INDIRIZZO,0
Add INDIRIZZO,4
Loke INDIRIZZO,LUNGHEZZACAMPIONE
Add INDIRIZZO,4
Loke INDIRIZZO,0
Add INDIRIZZO,4
Doke INDIRIZZO,NUOVAFREQUENZA
Add INDIRIZZO,2
Doke INDIRIZZO,256
Add INDIRIZZO,2
Doke INDIRIZZO,256
Add INDIRIZZO,2
Doke INDIRIZZO,0
Add INDIRIZZO,2
If NOMEFILE$<>""
Poke$ INDIRIZZO,"NAME"
Add INDIRIZZO,4
Loke INDIRIZZO,LUNGHEZZANOME
Add INDIRIZZO,4
Poke$ INDIRIZZO,NOMEFILE$
Add INDIRIZZO,Len(NOMEFILE$)
If RESTONOME>0
ZERINELNOME=4-RESTONOME
Inverse On
For A=1 To ZERINELNOME
Poke INDIRIZZO,0
Inc INDIRIZZO
Next A
End If
End If
Poke$ INDIRIZZO,"ANNO"
Add INDIRIZZO,4
Loke INDIRIZZO,LUNGHEZZAANNO
Add INDIRIZZO,4
Poke$ INDIRIZZO,"SamplesMaster by Stefano Regattin"+String$(Chr$(0),3)
Add INDIRIZZO,LUNGHEZZAANNO
Poke$ INDIRIZZO,"BODY"
Add INDIRIZZO,4
Loke INDIRIZZO,LUNGHEZZACAMPIONE
Add INDIRIZZO,4
Copy INIZIOCAMPIONE,FINECAMPIONE To INDIRIZZO
Add INDIRIZZO,LUNGHEZZACAMPIONE
If INDIRIZZO=Start(BANCODIIO)+Length(BANCODIIO)
Proc TIC["Conversione campione audio da RAW ad IFF avvenuta",ULTIMALINEA]
Else
Proc TIC["Conversione campione audio da RAW ad IFF fallita!",ULTIMALINEA]
Erase BANCODIIO
Wait 200
Pop Proc
End If
Bsave FILE$,Start(BANCODIIO) To Start(BANCODIIO)+Length(BANCODIIO)
Erase BANCODIIO
Else
Proc TIC["Sto salvando il campione audio RAW",ULTIMALINEA-1]
Proc TIC[FILE$,ULTIMALINEA]
Bsave FILE$,INIZIOCAMPIONE To FINECAMPIONE+1
End If
Wait 200
End If
End Proc
Procedure SETTALEZONE
Reserve Zone 21
Print At(0,ULTIMALINEA-3);Zone$("Suona",1)
Print At(0,ULTIMALINEA-2);Zone$("Ferma",2)
Print At(6,ULTIMALINEA-3);Zone$("Ciclo",3)
Print At(12,ULTIMALINEA-3);Zone$("Filtro",4)
Print At(21,ULTIMALINEA-3);"Mostra campione"
Print At(19,ULTIMALINEA-2);Zone$("Tutto",5)
Print At(26,ULTIMALINEA-2);Zone$("Tra le linee",6)
Print At(40,ULTIMALINEA-3);"Posizione"
Inverse On : Print At(39,ULTIMALINEA-2);Zone$("Inizio",7) : Inverse Off
Print At(46,ULTIMALINEA-2);Zone$("Fine",8)
Print At(53,ULTIMALINEA-3);"Cerca lo zero"
Print At(51,ULTIMALINEA-2);Zone$("<Indietro",9)
Print At(61,ULTIMALINEA-2);Zone$("Avanti>",10)
Print At(69,ULTIMALINEA-3);Zone$("Carica",11)
Set Zone 12,0,72 To 639,72+ALTEZZA
Set Zone 13,0,0 To 639,63
Print At(6,ULTIMALINEA-2);Zone$("Genera",14)
Print At(69,ULTIMALINEA-2);Zone$("Salva",15)
Print At(76,ULTIMALINEA-2);Zone$("Esci",16)
Set Zone 17,0,72+ALTEZZA+1 To 639,72+ALTEZZA+1+7
YSLIDERINGRANDIMENTO=72+ALTEZZA+1
Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,0,1
Print At(0,ULTIMALINEA-5);Zone$("Frequenza",18);
Print Zone$(Chr$(147)+Chr$(148),19);
Print Zone$(Chr$(149)+Chr$(150),20);
Print ">"
Print At(26,ULTIMALINEA-5);Zone$("MixTimbri",21)
End Proc
Procedure SETTASCHERMO
If Ntsc Then LUNGHEZZASCHERMO=200 Else LUNGHEZZASCHERMO=256
If Ntsc Then RIDUZIONE=4 Else RIDUZIONE=2
ALTEZZA=256/RIDUZIONE-1 : ZERO=128/RIDUZIONE-1
ULTIMALINEA=LUNGHEZZASCHERMO/8-1
Screen Open 0,640,LUNGHEZZASCHERMO,4,Hires : Curs Off : Flash Off
Palette $60,$CCC,$C00,$C0 : Pen 1 : Paper 0 : Cls : Curs Pen 1
Wait Vbl : Limit Mouse
End Proc
Procedure SLIDERINGRANDIMENTO
Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,POSIZIONESLIDER,1
End Proc
Procedure SOMMA
Shared LUNGHEZZASINTETICO
For X=0 To LUNGHEZZASINTETICO-1
DATO=Peek(Start(BANCODIIO)+X)
If DATO>127
Add DATO,-256
End If
Add F0RMADONDA(X),DATO
Next X
End Proc
Procedure SUONA
Sam Raw 1,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
Sam Raw 2,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
End Proc
Procedure TIC[TESTO$,LINEA]
'-> Testo Invertito e Centrato by Stefano Regattin
'i> 23 maggio 1996
'm> 25 maggio 1996
'---------------------------------------------------------------------------
'LINEA contiene il numero di linea dove si posizioner� il testo; se vale -1
' (True) il testo sar� posizionato alla linea dove si trova il cursore; in
' questo caso sar� necessario un comando PRINT per spostare il cursore
'----------------------------------------------------------------------
If LINEA=True Then L=Y Curs Else L=LINEA
Locate 0,L : Inverse On : Cline : Centre TESTO$ : Inverse Off
End Proc